// 给文件名字后缀加上他的birthTime

//同以目录下的文件更名：
const fs = require("fs");
const path = require("path");
const os = require("os");
const { addAbortSignal } = require("stream");
const { start } = require("repl");
// 包含当前文件夹所有内容的数组
let allFiles = fs.readdirSync(__dirname);
// 不包含文件夹的文件数组
let allFiles2 = allFiles.filter(item => {
    return !my_isFold(item)
})

// 验证是否是数字 只能判断一位数
function isNum(num) {
    let pattern = /^[0-9]$/
    return pattern.test(num)
}

// 验证是否带有0000-00-00格式的日期
function isMyDate(dateFile) {
    let lastIndex = dateFile.lastIndexOf('-')
    let tempStr = dateFile.slice(lastIndex - 7)
    let flag = true
    // 不改变原来的字符串 替换所有的-
    tempStr = tempStr.replace(/-/g, '')
    tempStr = tempStr.slice(0, tempStr.lastIndexOf('.'))
    // console.log(tempStr);
    for (let i = 0; i < tempStr.length; i++) {
        if (!isNum(tempStr.charAt(i))) {
            flag = false
        }
    }
    console.log(flag);
    return flag
}
// isMyDate('大表哥2荒野大镖客2自己解说 2021-08-28.mp4')
// isMyDate('script_renameFileDate2.js')
// 更名操作
function my_rename(oldName, newName) {
    fs.rename(oldName, newName, function (err) {
        if (err) {
            throw err;
        }

        // console.log("rename is done!");
    });
}

// 获取文件的大小名字类型信息
/* 1>访问时间（access time 简写为atime）
2>修改时间（modify time 简写为mtime）
3>状态修改时间(change time 简写为ctime) */
function get_fileMsg(file) {
    let msg = fs.statSync(file)
    let index = file.lastIndexOf('.')
    let suffix = file.slice(index + 1)
    let temp = msg.size / 1024 / 1024 + 'mb'
    let index2 = temp.indexOf('.')
    temp = temp.slice(0, index2 + 3) + 'mb'
    // console.log('get', msg);
    return {
        name: file,
        size: temp,
        type: suffix,
        /* modifyTime: msg.mtime,
        birthTime:msg.birthtime */
    }
}

// 获取文件的创建日期信息 2021-07-26 默认是birthTime
function getFileBirthtime(file, timeType = 'birthtime') {
    let msg = fs.statSync(file)
    let time = msg[timeType]
    // return msg;
    time = renderTime(time)
    let index = time.indexOf(' ')
    time = time.slice(0, index)
    return time
}

// 别人写的代码，很鸡儿好用
function renderTime(date) {
    var dates = new Date(date).toJSON();
    return new Date(+new Date(dates) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/,
        '')
}


// 判断是否文件夹
function my_isFold(fileOrFoldName) {
    return fs.lstatSync(fileOrFoldName).isDirectory()
}

// 验证结尾后缀是否为真。str文件的名字。appoint文件后缀的名字
function my_validationEnd(str, appoint) {
    // 不区分大小写全部转换成小写。
    str = str.toLowerCase();
    let tempArr = str.split(".");
    let endStr = tempArr[tempArr.length - 1];
    if (appoint === endStr) {
        return true;
    }
    return false;
}
// 过滤数组的方法，返回我想要的文件类型的数组。第一个参数文件数组。第二个参数后缀名，字符串。
function type_arr(arr, typeStr) {
    let newArr = [];
    for (let i in arr) {
        if (my_validationEnd(arr[i], typeStr)) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

// 给这个文件夹里面所有文件加上日期后缀名字
// forEach里面
/* 或者 return true; 来代替 continue 语句；
使用 return false; 来代替 break语句； */
// 先改名字然后添加时间后缀
function renameAddDateAndFilename(fileName, fileType) {
    let thisTypeArr = type_arr(allFiles2, fileType);
    thisTypeArr.forEach(item => {
        if (item === __filename.slice(__dirname.length + 1) || isMyDate(item)) return true
        let ind = item.lastIndexOf('.')
        // let backName = item.slice(0, ind)
        // 包含.
        let suffix = item.slice(ind)
        // my_rename(item, backName + ' ' + getFileBirthtime(item, 'mtime') + suffix)
        my_rename(item, fileName + ' ' + getFileBirthtime(item, 'mtime') + suffix)
    })
    console.log('时间后缀添加成功！');
}
renameAddDateAndFilename("荒野大镖客2无解说","mp4");